﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Suspiros_Persistencia;
using Suspiros_ObjetosNegocio;
using System.Data;
using System.IO;
using System.Text;
using System.Web.UI.HtmlControls;

namespace SuspirosWeb
{
    public partial class Formulario_web15 : System.Web.UI.Page
    {

        CarritoDAO carritos = new CarritoDAO();
        ProductoDAO productos = new ProductoDAO();
        int idCarrito = 0;

        protected void Page_Load(object sender, EventArgs e)
        {
            //si existe un usuario logeado, desplegara su carrito...

            if (Session["UserSessionId"] != null)
            {
                llenaGrid();
            }
            else
            {
                //Declaramos un StringBuilder para almacenar el alert que queremos mostrar
                StringBuilder sbMensaje = new StringBuilder();
                //Aperturamos la escritura de Javascript
                sbMensaje.Append("<script type='text/javascript'>");
                //Le indicamos al alert que mensaje va mostrar
                sbMensaje.AppendFormat("alert('{0}');", "Es necesario iniciar sesion");
                //Cerramos el Script
                sbMensaje.Append("</script>");
                //Registramos el Script escrito en el StringBuilder
                ClientScript.RegisterClientScriptBlock(this.GetType(), "mensaje", sbMensaje.ToString());
                Response.Redirect("../vistas/index.aspx");
            }

        }

        /*
         * segir comprando, agregar productos
         */
        protected void btnComprar_Click(object sender, EventArgs e)
        {
            int rowIndex = 0;
            double total = 0;
            //si existe una tabla en el view
            if (ViewState["CurrentTable"] != null)
            {
                List<int> ids = new List<int>();
                //recupera la tabla!
                DataTable dt = (DataTable)ViewState["CurrentTable"];
                if (dt.Rows.Count > 0)
                {
                    //itera sobre los rows de la tabla y recupera cada producto
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        int id = Int32.Parse(GridView1.Rows[rowIndex].Cells[1].Text);
                        total += double.Parse(GridView1.Rows[rowIndex].Cells[3].Text);
                        if (productos.stockProductoById(id) == 0)
                        {
                            //Declaramos un StringBuilder para almacenar el alert que queremos mostrar
                            StringBuilder sbMensaje = new StringBuilder();
                            //Aperturamos la escritura de Javascript
                            sbMensaje.Append("<script type='text/javascript'>");
                            //Le indicamos al alert que mensaje va mostrar
                            sbMensaje.AppendFormat("alert('{0}');", "El producto con ID:" + id + " no esta disppnible");
                            //Cerramos el Script
                            sbMensaje.Append("</script>");
                            //Registramos el Script escrito en el StringBuilder
                            ClientScript.RegisterClientScriptBlock(this.GetType(), "mensaje", sbMensaje.ToString());
                            break;
                        }
                        else { ids.Add(id); }
                        rowIndex++;
                    }
                    for (int i = 0; i < ids.Count; i++)
                    {
                        carritos.actualizaProductoCarrito(idCarrito, ids.ElementAt<int>(i), 1, 1);
                    }
                    Response.Redirect("../vistas/Direccion.aspx?idCarrito="+idCarrito+"&cant="+total);
                }
            }
        }

        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            //int idProducto = (int)GridView1.DataKeys[e.RowIndex].Value;
            string idProducto = ((GridView1.Rows[e.RowIndex].Cells[1])).Text;
            carritos.eliminaProductoCarrito(idCarrito, Int32.Parse(idProducto));
            llenaGrid();
            //string algo = alumnos.SP(2, alumno);
            //lblResultado.Text = algo;
            //GridView1.EditIndex = -1;
            //conectaControl1(lblMensaje.Text.ToString());
        }

    /*
     * rellena el grid con producto s del usuario!
     */
        private void llenaGrid()
        {
            int idUsuario = (int)Session["UserSessionId"];
            DataTable result = carritos.obtenerCarritoByUsuario(idUsuario).Tables[0];
            if (result.Rows.Count != 0)
            {
                //Setear productos
                Carrito carrito = null;
                foreach (DataRow row in result.Rows)
                {
                    carrito = new Carrito(
                    (int)Convert.ToInt32(row["id"]),
                    (int)Convert.ToInt32(row["idUsuario"]),
                    (int)Convert.ToInt32(row["idDireccion"]),
                    (int)Convert.ToInt32(row["idPago"]),
                    (int)Convert.ToInt32(row["idOrden"]),
                    (int)Convert.ToInt32(row["status"])
                    );
                }
                lblOrden.Text = Convert.ToString(carrito.IdOrden);
                lblNombre.Text = Convert.ToString(Session["UserSessionName"]);
                lblStatus.Text = Convert.ToString(carrito.Status);

                //Desplegar productos en pagina
                DataTable carritoResult = carritos.obtenerCarritoProductosByCarrito(carrito.Id).Tables[0];
                //Setear productos
                CarritoProductos carritoProductos = null;
                Producto producton = null;
                List<CarritoProductos> carritoProductosList = new List<CarritoProductos>();
                List<Producto> productoList = new List<Producto>();
                foreach (DataRow row in carritoResult.Rows)
                {
                    carritoProductos = new CarritoProductos(
                    (int)Convert.ToInt32(row["id"]),
                    (int)Convert.ToInt32(row["idCarrito"]),
                    (int)Convert.ToInt32(row["idProducto"]),
                    (int)Convert.ToInt32(row["cantidad"]),
                    (int)Convert.ToInt32(row["status"])
                    );
                    carritoProductosList.Add(carritoProductos);
                    idCarrito = carritoProductos.IdCarrito;
                    DataTable prodResult = productos.obtenerProductosById(carritoProductos.IdProducto).Tables[0];
                    foreach (DataRow row2 in prodResult.Rows)
                    {
                        producton = new Producto(
                        (int)Convert.ToInt32(row2["id"]),
                        Convert.ToString(row2["imagen"]),
                        Convert.ToString(row2["nombre"]),
                        Convert.ToString(row2["descripcion"]),
                        Convert.ToDouble(row2["precio"]),
                        (int)Convert.ToInt32(row2["stock"]),
                        (int)Convert.ToInt32(row2["catalogo"])
                        );
                        productoList.Add(producton);
                    }
                }
                //Obtener Productos del carrito activo...
                //Setear productos
                HtmlTableRow htRow = new HtmlTableRow();
                HtmlTableCell htCell = new HtmlTableCell();
                StringBuilder display = new StringBuilder();
                DataTable dt = new DataTable();
                DataRow dr = null;
                dt.Columns.Add(new DataColumn("RowID", typeof(string)));
                dt.Columns.Add(new DataColumn("RowNombre", typeof(string)));
                dt.Columns.Add(new DataColumn("RowPrecio", typeof(string)));
                for (int i = 0; i < productoList.Count; i++)
                {
                    Producto producto = productoList[i];
                    dr = dt.NewRow();
                    dr["RowID"] = producto.Id;
                    dr["RowNombre"] = producto.Nombre;
                    dr["RowPrecio"] = producto.Precio;
                    dt.Rows.Add(dr);
                }
                ViewState["CurrentTable"] = dt;
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }
            else
            {
                lblMensaje.Text = "NO SE ENCONTRARON PRODUCTOS EN EL CARRITO";
            }
        }

    }
}
